use serde_derive::{Deserialize, Serialize};

/// Pager 结构体用于封装分页信息
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Pager {
    /// 当前页码
    pub page_num: u16,
    /// 每页记录数
    pub page_size: u16,
    /// 总页数
    pub page_total: Option<usize>,
    /// 总记录数
    pub record_total: Option<usize>,
}

impl Pager {
    /// 创建新的 Pager 实例
    ///
    /// # 参数
    /// * `page_num` - 当前页码
    /// * `page_size` - 每页记录数
    /// * `page_total` - 总页数
    /// * `record_total` - 总记录数
    ///
    /// # 返回值
    /// 返回一个新的 Pager 实例
    pub fn new(page_num: u16, page_size: u16, page_total: Option<usize>, record_total: Option<usize>) -> Self {
        Pager {
            page_num,
            page_size,
            page_total,
            record_total,
        }
    }

    /// 设置当前页码
    ///
    /// # 参数
    /// * `page_num` - 当前页码
    ///
    /// # 返回值
    /// 返回 Pager 实例本身
    pub fn set_page_num(&mut self, page_num: u16) -> &mut Self {
        self.page_num = page_num;
        self
    }

    /// 设置每页记录数
    ///
    /// # 参数
    /// * `page_size` - 每页记录数
    ///
    /// # 返回值
    /// 返回 Pager 实例本身
    pub fn set_page_size(&mut self, page_size: u16) -> &mut Self {
        self.page_size = page_size;
        self
    }

    /// 设置总页数
    ///
    /// # 参数
    /// * `page_total` - 总页数
    ///
    /// # 返回值
    /// 返回 Pager 实例本身
    pub fn set_page_total(&mut self, page_total: Option<usize>) -> &mut Self {
        self.page_total = page_total;
        self
    }

    /// 设置总记录数
    ///
    /// # 参数
    /// * `record_total` - 总记录数
    ///
    /// # 返回值
    /// 返回 Pager 实例本身
    pub fn set_record_total(&mut self, record_total: Option<usize>) -> &mut Self {
        self.record_total = record_total;
        self
    }
}

fn main() {
    // 创建一个新的 Pager 实例
    let mut pager = Pager::new(1, 10, None, None);

    // 设置总页数
    pager.set_page_total(Some(5));

    // 设置总记录数
    pager.set_record_total(Some(50));

    // 输出 Pager 对象
    log::info!("{:?}", pager);
}
